let a = 1
const b:1 = 1

let strOrNum: string | number;
// strOrNum.split   从安全性考虑

//1 指定类型再使用
// strOrNum = '1'
// strOrNum = 1

// 2) 我们断言类型后再使用 as断言成某种类型(一定是联合类型中的某一个)  !(非空断言，表示这个值一定不是空的)
// 不存在结果你自己承担, ts不管了， 你认为的一定有值
(strOrNum! as string).charCodeAt(0);
(<number>strOrNum!).toFixed(3)

let ele = document.getElementById('app');
(ele as HTMLElement).style.background = 'red';


// 值as xxx 或者 <xxx>值  一般用于联合类型
(strOrNum! as unknown as boolean) // 双重断言，一般不建议使用，但是还会用到，破坏原有的关系

// 类型别名 type将类型提取出来
type Direction='up'|'down'|'left'|'right'; // 快速构建一个可以复用的类型
let direction:Direction
let up:'down' = direction! as 'down'

export {}